package connect

type Node struct {
	Val   int
	Left  *Node
	Right *Node
	Next  *Node
}

/*
每一个树节点指向它右边的结点
*/
func connect(root *Node) *Node {
	if root == nil {
		return root
	}
	// 定义函数con: 每一层相邻的两个结点进行 左指右
	// 需要两个参数node1，node2的原因：跨父结点时，node1，node2的父节点不同，但是祖父结点相同
	var con func(node1, node2 *Node)
	con = func(node1, node2 *Node) {
		if node1 == nil || node2 == nil {
			return
		}
		node1.Next = node2
		con(node1.Left, node1.Right)
		con(node2.Left, node2.Right)
		con(node1.Right, node2.Left)
	}

	con(root.Left, root.Right)
	return root
}
